package com.tmxk.jdbc02.dao.impl;

import com.tmxk.jdbc02.dao.DeptDao;
import com.tmxk.jdbc02.entity.Dept;
import com.tmxk.jdbc02.utils.BaseDao;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 * 操作DeptDao接口的实现类
 */
public class DeptDaoImpl extends BaseDao implements DeptDao {
    @Override
    public List<Dept> queryAllDept() {
        // 1.创建Dept集合对象,用来存储数据库查询返回的结果集数据
        List<Dept> depts = new ArrayList<>();
        // 2. 创建Dept对象,用来存储单条dept数据
        Dept dept = null;
        // 3. 定义查询dept表所有数据的sql语句
        //    DEPTNO     DNAME   LOC
        String sql = "SELECT DEPTNO, DNAME, LOC FROM DEPT ";
        // 4. 调用公共的查询rs结果集方法
        super.rs = super.executeQuery(sql);
        // 5. 循环遍历rs结果集
        try{
            while(rs.next()){
                // 实例化dept对象
                dept = new Dept();
                dept.setDeptNo(rs.getInt("DEPTNO"));
                dept.setdName(rs.getString("DNAME"));
                dept.setLoc(rs.getString("LOC"));
                // 将赋值后的单条对象数据存储到depts集合对象中
                depts.add(dept);
            }
        }catch (SQLException e){
            e.printStackTrace();
        }finally {
            // 6. 释放所有资源
            super.closeAllConn(rs,pstmt,conn);
        }
        return depts;
    }

    @Override
    public Dept queryOneDept(int deptNo) {
        // 1. 创建Dept对象用来存储单条数据信息
        Dept dept = null;
        // 2. 定义查询单条sql语句
        String sql = " SELECT DEPTNO, DNAME, LOC FROM DEPT WHERE DEPTNO = ?  ";
        // 3. 调用查询rs结果集的方法
        super.rs = super.executeQuery(sql,new Object[]{deptNo});
        // 4. 遍历rs结果集
        try{
            if(rs.next()){
                //实例化dept对象,并赋值
                dept = new Dept(rs.getInt("DEPTNO"),
                                rs.getString("DNAME"),
                                rs.getString("LOC"));
            }
        }catch (SQLException e){
            e.printStackTrace();
        }finally {
            super.closeAllConn(rs,pstmt,conn);
        }
        return dept;
    }

    @Override
    public int addDept(Dept dept) {
        //1. 定义一个变量,用来接收受影响的行数
        int addRes = 0;
        // 2. 定义新增sql语句
        String sql = "INSERT INTO DEPT(DEPTNO,DNAME,LOC) VALUES(SEQ_DEPT_NO.NEXTVAL,?,?)";
        // 3. 调用公共的DML操作方法
        addRes = super.executeUpdate(sql, new Object[]{dept.getdName(),dept.getLoc()});
        return addRes;
    }

    @Override
    public int updateDeptByDeptNo(Dept dept) {
        //定义更新sql
        String sql = " UPDATE DEPT SET DNAME = ?, LOC = ? WHERE DEPTNO = ?  ";
        return super.executeUpdate(sql, new Object[]{dept.getdName(), dept.getLoc() , dept.getDeptNo()});
    }

    @Override
    public int deleteDeptByDeptNo(int deptNo) {
        //定义删除sql
        String sql = " DELETE FROM DEPT WHERE DEPTNO = ? ";
        return executeUpdate(sql,new Object[]{deptNo});
    }
}
